#ifndef GLOBAL_THRESHOLD_OPERATOR_HPP
#define GLOBAL_THRESHOLD_OPERATOR_HPP

//------------------------------------------------------------------------------
// Fichier d'entête utilisés
//------------------------------------------------------------------------------
#include "Operator.hpp"
#include "ThresholdFinder.hpp"
#include "Gradiant.hpp"
#include "BinaryImage.hpp"
#include "ThresholdFinder.hpp"

namespace ImageAnalysis
{
//----------------------------------------------------------------------
//  Cette classe permet d'appliquer le seuillage d'une image
// gradiant pour la binariser. Ce seuillage est global. Un objet de
//type ThresholdFinder est utilisé afin de trouver un seuil pour
// l'ensemble de l'image gradiant.
//----------------------------------------------------------------------
class GlobalThresholdOperator : public Operator
{
public:
	//----------------------------------------------------------------------
	// Structure
	//----------------------------------------------------------------------
	
	//----------------------------------------------------------------------
	// Constructeur
	//----------------------------------------------------------------------
	GlobalThresholdOperator( Gradiant* gradiant, BinaryImage* image, ThresholdFinder* finder );
	
	//----------------------------------------------------------------------
	// Destructeur
	//----------------------------------------------------------------------
	virtual ~GlobalThresholdOperator();
	
	//----------------------------------------------------------------------
	// C'est cette méthode qui va effectuer le seuillage
	//----------------------------------------------------------------------
    	virtual void Process( );

private:
	//----------------------------------------------------------------------
        // 
	//----------------------------------------------------------------------
	ThresholdFinder* thresholdFinder;
	Gradiant* currentGradiant;
	BinaryImage* currentThresholdImage;

        //----------------------------------------------------------------------
        // Constructeur par copie et oprérateur d'affectation en privée pour
        // interdire leur utilisation
        //----------------------------------------------------------------------
        GlobalThresholdOperator( const GlobalThresholdOperator& copy);
        GlobalThresholdOperator& operator=( const GlobalThresholdOperator& copy );
};

}

#endif //GLOBAL_THRESHOLD_OPERATOR_HPP
